#ifndef THREAD_GUARD_H
#define THREAD_GUARD_H
#include <thread>

/**
 * @brief 守护线程类
 */
class ThreadGuard
{
public:
    /**
     * @brief explicit 用于防止隐式转换而引起的错误
     * @param t 线程对象的引用
     */
    explicit ThreadGuard(std::thread& t)
        :_t(t)
    {}

    /**
     * @brief 如果线程没有被 join 或 detach，则在析构函数中分离线程
     */
    ~ThreadGuard()
    {
        if (_t.joinable())
        {
            _t.join(); // 等待线程完成
        }
    }

    // 禁止复制构造和赋值操作，防止线程被多次管理
    ThreadGuard(const ThreadGuard& other) = delete;
    ThreadGuard& operator=(const ThreadGuard& other) = delete;

private:
    std::thread& _t;
};


#endif //THREAD_GUARD_H
